<?php

namespace libs\qoy\Logger;

/**
 * Logger 日记抽象类
 *
 * - 对系统的各种情况进行纪录，具体存储媒介由实现类定义
 * - 日志分类型，不分优先级，多种类型可按并组合
 */
abstract class Logger implements ILogger {

    /**
     * 日记纪录
     *
     * 可根据不同需要，将日记写入不同的媒介
     * @param string $type 日记类型，如：info/debug/error, etc
     * @param string $msg 日记关键描述
     * @param string/array $data 场景上下文信息
     * @return NULL
     */
    abstract public function log($type, $msg, $data);

    /**
     * @see ILogger->info
     */
    public function info(string $msg, $data = NULL) {
        $this->log('info', $msg, $data);
    }

    /**
     * @see ILogger->debug
     */
    public function debug(string $msg, $data = NULL) {
        $this->log('debug', $msg, $data);
    }

    /**
     * @see ILogger->error
     */
    public function error(string $msg, $data = NULL) {
        $this->log('error', $msg, $data);
    }

}
